//package com.bxw.forum.component;
//
//
//import com.bxw.forum.common.AppResult;
//import com.bxw.forum.common.ResultCode;
//import com.bxw.forum.dao.MessageMapper;
//import com.bxw.forum.exception.ApplicationException;
//import com.bxw.forum.model.Message;
//import com.bxw.forum.model.WebSocketMessage;
//import com.bxw.forum.service.IUserService;
//import com.fasterxml.jackson.core.JsonProcessingException;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import javax.websocket.*;
//import javax.websocket.server.PathParam;
//import javax.websocket.server.ServerEndpoint;
//import java.awt.geom.RectangularShape;
//import java.io.IOException;
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import org.springframework.web.socket.TextMessage;
//import org.springframework.web.socket.WebSocketSession;
//import org.springframework.web.socket.handler.TextWebSocketHandler;
//import sun.applet.AppletIOException;
//
//@Slf4j
//@ServerEndpoint("/myWs/{onlineUserId}")
//@Component
//public class WsServerEndpoint {
//    //线程安全
//    private static final Map<String, Session> userSessions = new ConcurrentHashMap<>();
//
//
//    @Resource
//    MessageMapper messageMapper;
//    @Resource
//    IUserService userService;
//    @Resource
//    ObjectMapper objectMapper;
//    /**
//     * 连接成功
//     *
//     * @param session
//     */
//    @OnOpen
//    public void onOpen(Session session, @PathParam("onlineUserId") String userId) {
//
//        if(userSessions.get(userId) == null) {
//            userSessions.put(userId,session);
//            System.out.println("连接成功");
//            System.out.println(userId);
//        }else {
//            log.warn(ResultCode.FAILED_USER_EXISTS.toString());
//
//            throw new ApplicationException(AppResult.fail(ResultCode.FAILED_USER_EXISTS));
//        }
//
//        System.out.println("显示当前在线人数" + userSessions.size());
//;
//    }
//
//    /**
//     * 连接关闭
//     *
//     * @param
//     */
//    @OnClose
//    public void onClose(Session session,@PathParam("userId")String userId) {
//
//        if(userSessions.get(userId) != null) {
//            userSessions.remove(userId);
//            System.out.println("连接关闭");
//
//        }else {
//            log.warn(ResultCode.FAILED_USER_NOT_EXISTS.toString());
//
//            throw new ApplicationException(AppResult.fail(ResultCode.FAILED_USER_NOT_EXISTS));
//        }
//    }
//
////    @OnError
////    public void onError() {
////        System.out.println("链接异常");
////
////    }
//
//    /**
//     * 接收到消息
//     *
//     * @param
//     */
//    @OnMessage
//    public void onMsg(String content, @PathParam("userId")String userId) throws IOException {
//
//        // 接收到客户端的消息(ReceiveUserId,content)
//        // 在此之前ajax已经经过了MessageController校验
//        // 这里处理的是发送成功后的转发处理
//        System.out.println("websocket从客户端接收到发送的消息");
//        ObjectMapper objectMapper = new ObjectMapper();
//        WebSocketMessage webSocketMessage = objectMapper.readValue(content, WebSocketMessage.class);
//
//        sendMessage(userId,webSocketMessage);
//
////        System.out.println(Long.parseLong(userId));
////        User postUser = userService.selectById(Long.parseLong(userId));
////        System.out.println(postUser);
////
////
////        System.out.println("receiveUserId = " + webSocketMessage.getReceiveUserId() + "content = " + webSocketMessage.getContent());
//
//    }
//
//    public void sendMessage(String userId,WebSocketMessage webSocketMessage) throws IOException {
//
//        System.out.println(userId);
//        Long postUserId = Long.parseLong(userId);
//        System.out.println(postUserId);
//
//        Long receiveUserId = webSocketMessage.getReceiveUserId();
//        System.out.println(receiveUserId);
//
//        Message message = messageMapper.selectByPostToReceive(postUserId,receiveUserId);
//
//        if(message == null || message.getDeleteState() != 0) {
//            log.warn(ResultCode.FAILED_MESSAGE_NOT_EXISTS.toString());
//
//            throw new ApplicationException(AppResult.fail(ResultCode.FAILED_MESSAGE_NOT_EXISTS));
//        }
//        System.out.println(message);
//
//        String jsonMessage = objectMapper.writeValueAsString(message);
//        System.out.println("序列化后的Message" + jsonMessage);
//
//        WebSocketSession webSocketSession = (WebSocketSession) userSessions.get(receiveUserId.toString());
//
//        if(webSocketMessage != null) {
//            webSocketSession.sendMessage(new TextMessage(jsonMessage));
//        }
//
////        System.out.println("websocket发送消息成功");
////        System.out.println("receiveUserId = " + receiveUserId + "content = " + content);
//    }
//
//}
//
